// 基于以下代码完成下面的四个练习
const _ = require('lodash')
const fp = require('lodash/fp')
// 数据
// horsepower 马力, doller_value 价格, in_stock 库存
const cars = [
    {name: 'Ferrari FF', horsepower: 660, dollar_value: 700000, in_stock: true},
    {name: 'Spyker C12 Zagato', horsepower: 650, dollar_value: 648000, in_stock: false},
    {name: 'Jaguar XKR-S', horsepower: 550, dollar_value: 132000, in_stock: false},
    {name: 'Audi R8', horsepower: 525, dollar_value: 114200, in_stock: false},
    {name: 'Aston Martin One-77', horsepower: 750, dollar_value: 1850000, in_stock: true},
    {name: 'Pagani Huayra', horsepower: 700, dollar_value: 1300000, in_stock: false}
]

// 练习4： 使用flowRight写一个sanitizeNames()函数， 返回一个下划线连接的小写字符串，把数组中的name转换为这种形式：例如：
// sanitizeNames(["Hello World"]) => ["hello_word"]

const trace = _.curry((tag, v) => {
    console.log(tag, v)
    return v
})

let _underscore = fp.replace(/\W+/g, '_') // <-- 无须改动，并在 sanitizeNames 中使用它

// fp.map第一个参数为处理函数，使用柯里化，等待第二个参数（数值）
const arrMap = fp.map(item => item.name)
// 得到name组成的新数组，并对每一个元素中的字符进行替换'_'，再转为小写
const arrLowerMap = fp.map(fp.flowRight(fp.toLower, _underscore))

// 定义的这个函数是一个纯函数
let sanitizeNames = function(arr) {
    // 先使用替换函数把空格替换为'_'
    // 返回的是一个函数
    return fp.flowRight(arrLowerMap, arrMap)
}
// 所以需要执行一次得到返回的函数，赋值给一个变量
let getLowerStr = sanitizeNames()
console.log(getLowerStr(cars))